/**
 * @module 二进制/位移相关
 */
// ES6 引入了bigint类型，可以表示任意大的整数，但是位移运算符只能用于32位整数，所以bigint类型不能使用位移运算符
// ES6 引入了Symbol类型，不能使用位移运算符
// ---------------------------------分割线---------------------------------

// const number1 = 88
// 转换为二进制
// console.log(number1.toString(2)) // 1011000
// 无符号右移 0位
// console.log((number1 >>> 0).toString(2)) // 1011000
// 有符号右移
// console.log((number1 >> 0).toString(2)) // 1011000
// 正数的有符号和无符号 0位结果一样
//  ---------------------------------分割线---------------------------------
// 无符号右移
// const number3 = number1 >>> 2 // 22
// console.log(number3)
// console.log(number3.toString(2)) // 10110
// 有符号右移
// const number4 = number1 >> 2 // 22
// console.log(number4)
// console.log(number4.toString(2)) // 10110
// 正数的有符号右移和无符号右移结果一样
//  ---------------------------------分割线---------------------------------
// 无符号左移
// const number5 = number1 << 2 // 352
// console.log(number5)
// console.log(number5.toString(2)) // 101100000
// 有符号左移
// const number6 = number1 << 2 // 352
// console.log(number6)
// console.log(number6.toString(2)) // 101100000
// 正数的有符号左移和无符号左移结果一样 都是在二进制的基础上往左侧移动2位右侧补2个0
// ---------------------------------分割线---------------------------------

// const number2 = -352
// 转换为二进制
// 负数有符号的位移是直接获取正数的二进制结果，然后在前面补上+/-符号位
// console.log(number2.toString(2)) // -101100000
// 无符号右移 0位
// 负数 无符号移动 0位 结果不一样 先将正数转换为二进制，然后减1，再对码取反(1=>0 0=>1)，再补码 负数补位1 正数补位0
// 负数的无符号位移之后会转为正数
// console.log(number2 >>> 0) // 4294966944
// console.log((number2 >>> 0).toString(2)) // 11111111111111111111111010100000
// 有符号右移 0位
// 负数有符号的右移是直接获取正数的二进制结果，然后在前面补上+/-符号位
// console.log((number2 >> 0).toString(2)) // -101100000

// 无符号右移 2位
// 负数的无符号右移2位 先获取无符号的二进制结果 然后 会将二进制的右侧2位移除（右移2位），然后左侧（高位）补2个0，因为最长32位，0可以忽略不写
// const number3 = number2 >>> 2
// console.log(number3) // 1073741736
// 无符号右移 2位
// console.log(number3.toString(2)) // 111111111111111111111110101000

// 有符号右移 2位
// 负数的有符号右移2位 先获取有符号的二进制结果 然后 会将二进制部分的右侧2位移除（右移2位），然后左侧（高位）补2个0，因为最长32位，0可以忽略不写
// const number4 = number2 >> 2
// console.log(number4) // -88
// console.log(number4.toString(2)) // -1011000

// parseInt 函数 第二个参数是进制数 取值范围是2-36
// ;['1', '3', '5'].map(parseInt) // 结果 [1, NaN, NaN]
// 以上代码等价于执行以下代码
// parseInt('1', 0) // 1
// parseInt('3', 1) // NaN
// parseInt('5', 2) // NaN
